﻿using System;

namespace Moe.ECamel.Common.Contracts
{
	/// <summary>
	/// Contract for system services.
	/// </summary>
	public interface ISystemService : IECamelService
	{
		/// <summary>
		/// Load initial system startup information.
		/// </summary>
		/// <returns>Startup information.</returns>
		ECamelSystemInfo GetSystemInfo();

		/// <summary>
		/// Login using provided username and password.
		/// </summary>
		/// <param name="request">Login request information.</param>
		/// <returns>User information if login was successful, null otherwise.</returns>
		LoginResponse Login(LoginRequest request);

		/// <summary>
		/// Creates a database and initializes it with required system data.
		/// </summary>
		/// <param name="setupInfo">Setup information required to initialize database.</param>
		void ResetDatabase(ECamelSetupInfo setupInfo);
		/// <summary>
		/// Deletes the database.
		/// </summary>
		void DeleteDatabase();
		/// <summary>
		/// Deletes all user-entered information from the system.
		/// </summary>
		void DeleteUserData();
	}
}